package com.jiangnan.api.service

import com.jiangnan.entity.Book
import com.jiangnan.entity.PageResult
import com.jiangnan.entity.Res
import okhttp3.MultipartBody
import retrofit2.Response
import retrofit2.http.Body
import retrofit2.http.GET
import retrofit2.http.Multipart
import retrofit2.http.POST
import retrofit2.http.Part
import retrofit2.http.Query
import retrofit2.http.Field
import retrofit2.http.FormUrlEncoded

interface BookApiService {

    // 获取所有图书
    @GET("/repository/list")
    suspend fun getAllBooks(
        @Query("page") page: Int?,
        @Query("pageSize") pageSize: Int?,
        @Query("requestParam") requestParam: String?
    ): Res<PageResult<Book>>

    // 获取所有图书
    @GET("/repository/listOrderByBorrowNum")
    suspend fun getAllBooksOrderByBorrowNum(
        @Query("page") page: Int?,
        @Query("pageSize") pageSize: Int?,
        @Query("requestParam") requestParam: String?
    ): Res<PageResult<Book>>

    // 添加图书
    @POST("/repository")
    suspend fun saveBook(
        @Body book: Book
    ): Res<String>

    /**
     * 上传图片接口
     */
    @Multipart
    @POST("/upload")
    suspend fun uploadImage(
        @Part file: MultipartBody.Part
    ): Response<Res<String>>

    /**
     * 借阅图书接口
     * 参数：userId（用户ID）、bookId（图书ID）
     */
    @FormUrlEncoded
    @POST("/repository/borrow")
    suspend fun borrowBook(
        @Field("userId") userId: Long,
        @Field("bookId") bookId: Int
    ): Res<String>

    /**
     * 根据用户ID查询其借阅的图书列表
     */
    @GET("/repository/borrow/list")
    suspend fun getBorrowedBooks(
        @Query("userId") userId: Long
    ): Res<List<Book>>

    /**
     * 还书接口
     * 参数：userId（用户ID）、bookId（图书ID）
     * 后端实现：更新 user_book 表记录归还时间，更新 book 表剩余数量 +1
     */
    @FormUrlEncoded
    @POST("/repository/return")
    suspend fun returnBook(
        @Field("userId") userId: Long,
        @Field("bookId") bookId: Int
    ): Res<String>

    /**
     * 借阅图书接口
     * 参数：userId（用户ID）、bookId（图书ID）
     */
    @FormUrlEncoded
    @POST("/repository/borrowByQrcode")
    suspend fun borrowBookByQrcode(
        @Field("userId") userId: Long,
        @Field("bookIsbn") bookIsbn: String
    ): Res<String>

    @GET("/repository/borrowed/list")
    suspend fun getAllBorrowedBooks(
        @Query("userId") userId: Long
    ): Res<List<Book>>

    @GET("/repository/returned/list")
    suspend fun getAllReturnedBooks(
        @Query("userId") userId: Long
    ): Res<List<Book>>
}
